home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / tex / macros / source / contrib / xypic / src / xycirc10.mf < prev    next >
Text File  |  1995-03-09  |  5KB  |  139 lines

  1. % $Id: xycirc10.mf,v 2.7 1994/03/08 02:09:27 kris Exp $
  2. %
  3. % XYCIRC10: 1/8 circles with varying radii for XY-pic at 10 point.
  4. % Copyright (c) 1992,1993  Kristoffer H. Rose  <kris@diku.dk>
  5. %
  6. % This file is part of the XY-pic macro package.
  7. %
  8. % The XY-pic macro package is free software; you can redistribute it and/or
  9. % modify it under the terms of the GNU General Public License as published by
  10. % the Free Software Foundation; either version 2 of the License, or (at your
  11. % option) any later version.
  12. %
  13. % The XY-pic macro package is distributed in the hope that it will be
  14. % useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
  16. % Public License for more details.
  17. %
  18. % You should have received a copy of the GNU General Public License along
  19. % with this macro package; if not, write to the Free Software Foundation, Inc.,
  20. % 675 Mass Ave, Cambridge, MA 02139, USA.
  21. % _________________________________________________________________________
  22. %
  23. % CONTENTS: 1/8 circles with radii from 1 to 32pt dissected into the 1/8
  24. % circle segments shown below
  25. %                    6     5
  26. %                                   .......        _
  27. %                              7  ..   |   ..  4    |
  28. %                                : |   |   | :        | radius
  29. %                               :  |   |   |  :        |
  30. %       Reference point ---> ___:__|___|___|__:_____|
  31. %                               :  |   |   |  :
  32. %                                : |   |   | :
  33. %                              0  .!   |   !.  3
  34. %                                   ...|...
  35. %                    1     2
  36. %
  37. % such that each group of 8 characters cc+0 to cc+7 constitute a full circle
  38. % with the given radius when typeset on the same baseline (as shown).
  39. %
  40. % The bounding box of each segment is the vertical slice of the unit square
  41. % around the circle.
  42. %
  43. % The radius is given for each character group g = cc mod 8 by the formula
  44. %
  45. %  radius [pt] = g+1,        if  0 <= g < 8
  46. %                2(g-8) + 10,    if  8 <= g < 12        [= 2g-6]
  47. %             4(g-12) + 20,    if 12 <= g < 16        [= 4g-28]
  48. %
  49. % The bounding box of each segment is the smallest box enclosing it (not
  50. % including the rule width) with reference point on the horizontal line
  51. % through the center of the circle---so segment 1256 have either height or
  52. % depth negative.
  53. % _________________________________________________________________________
  54. %
  55. font_identifier "XYCIRC"; font_size 10pt#;
  56. mode_setup;
  57.  
  58. % METANESS...
  59. %
  60. rulew# = .4pt#; define_whole_blacker_pixels(rulew); % line thickness
  61. %
  62. pickup pencircle scaled rulew; char_pen := savepen;
  63.  
  64. % TESTING...we redefine openit because the characters extend far to the
  65. % left of the bounding box!
  66. %
  67. def openit = %let echar = endchar; def endchar = echar; stop ". " enddef;
  68.  openwindow currentwindow from origin to (1000,800) at (-200,300)
  69. enddef;
  70.  
  71. % FONT.
  72. %
  73. % Font dimension 8 is the rule thickness (cf. The TeXbook, app.G)
  74. %
  75. font_coding_scheme:="XY-pic 1/8 circles";
  76. fontdimen 8:    rulew#;            % default_rule_thickness
  77.  
  78. % Use the following macro that generates an entire group from character cc
  79. % to cc+7 with radius:
  80. %
  81. def makeg(expr g,radius) =
  82.  
  83.  minor# := (1 - sqrt 1/2) * radius;
  84.  major# := radius - minor#;
  85.  full#  := radius;
  86.  define_pixels(minor,major,full);
  87.  
  88.  beginchar(8g  ,minor#,full#,full#); pickup char_pen;
  89.   z0=(0,0); z1=(minor,-major); draw z0{0,-1}..{1,-1}z1;
  90.   penlabels(0,1); endchar;
  91.  
  92.  beginchar(8g+1,major#,full#,full#); pickup char_pen;
  93.   z0=(0,-major); z1=(major,-full ); draw z0{1,-1}..{1,0}z1;
  94.   penlabels(0,1); endchar;
  95.  
  96.  beginchar(8g+2,major#,full#,full#); pickup char_pen;
  97.   z0=(0,-full); z1=(major,-major); draw z0{1,0}..{1, 1}z1;
  98.   penlabels(0,1); endchar;
  99.  
  100.  beginchar(8g+3,minor#,full#,full#); pickup char_pen;
  101.   z0=(0,-major); z1=(minor,0); draw z0{1, 1}..{0, 1}z1;
  102.   penlabels(0,1); endchar;
  103.  
  104.  beginchar(8g+4,minor#,full#,full#); pickup char_pen;
  105.   z0=(0, major); z1=(minor,0); draw z0{1,-1}..{0,-1}z1;
  106.   penlabels(0,1); endchar;
  107.  
  108.  beginchar(8g+5,major#,full#,full#); pickup char_pen;
  109.   z0=(0, full); z1=(major, major); draw z0{1,0}..{1,-1}z1;
  110.   penlabels(0,1); endchar;
  111.  
  112.  beginchar(8g+6,major#,full#,full#); pickup char_pen;
  113.   z0=(0, major); z1=(major, full); draw z0{1, 1}..{1,0}z1;
  114.   penlabels(0,1); endchar;
  115.  
  116.  beginchar(8g+7,minor#,full#,full#); pickup char_pen;
  117.   z0=(0,0); z1=(minor, major); draw z0{0, 1}..{1, 1}z1;
  118.   penlabels(0,1); endchar
  119.  
  120. enddef;
  121.  
  122. % Make groups:
  123. %
  124. for g =  0 step 1 until  7: makeg(g,  (g+1)*pt#); endfor;
  125. for g =  8 step 1 until 11: makeg(g, (2g-6)*pt#); endfor;
  126. for g = 12 step 1 until 15: makeg(g,(4g-28)*pt#); endfor;
  127.  
  128. bye.
  129.  
  130. % $Log: xycirc10.mf,v $
  131. % Revision 2.7  1994/03/08  02:09:27  kris
  132. % Release 3alpha.
  133. %
  134. % Revision 2.6.9.1  1994/03/07  04:22:46  kris
  135. % Last internal 3alpha and pre-2.7 release.
  136. %
  137. % NEW file to go in version 2.7!
  138. % Based on xymisc10.mf [Revision 2.6  1992/06/24  01:23:34  kris]
  139.